Package com.odb.view.dashboard.client.charts

Source Code of com.odb.view.dashboard.client.charts.DynamicLineChart

/*******************************************************************************
* Copyright (c) 2012, Nabeel Shaheen 
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted
******************************************************************************/
package com.odb.view.dashboard.client.charts;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

import org.icepush.gwt.client.GWTPushContext;
import org.icepush.gwt.client.PushEventListener;

import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.EditorError;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.regexp.shared.RegExp;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.odb.view.dashboard.client.DataVO;
import com.odb.view.dashboard.client.DebugWindow;
import com.odb.view.dashboard.client.TimeSeriesDataVO;
import com.sencha.gxt.chart.client.chart.Chart;
import com.sencha.gxt.chart.client.chart.Chart.Position;
import com.sencha.gxt.chart.client.chart.Legend;
import com.sencha.gxt.chart.client.chart.axis.NumericAxis;
import com.sencha.gxt.chart.client.chart.axis.TimeAxis;
import com.sencha.gxt.chart.client.chart.series.LineSeries;
import com.sencha.gxt.chart.client.chart.series.Primitives;
import com.sencha.gxt.chart.client.chart.series.SeriesHighlighter;
import com.sencha.gxt.chart.client.draw.Color;
import com.sencha.gxt.chart.client.draw.DrawFx;
import com.sencha.gxt.chart.client.draw.RGB;
import com.sencha.gxt.chart.client.draw.path.PathSprite;
import com.sencha.gxt.chart.client.draw.sprite.Sprite;
import com.sencha.gxt.chart.client.draw.sprite.TextSprite;
import com.sencha.gxt.data.shared.LabelProvider;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.data.shared.ModelKeyProvider;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.button.ToggleButton;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.form.ComboBox;
import com.sencha.gxt.widget.core.client.form.TextField;
import com.sencha.gxt.widget.core.client.form.Validator;
import com.sencha.gxt.widget.core.client.form.error.DefaultEditorError;
import com.sencha.gxt.widget.core.client.form.validator.MaxLengthValidator;
import com.sencha.gxt.widget.core.client.toolbar.SeparatorToolItem;
import com.sencha.gxt.widget.core.client.toolbar.ToolBar;

public class DynamicLineChart extends ODBChart {

  private DebugWindow dbg = DebugWindow.getInstance();
  private final NumericAxis<TimeSeriesDataVO> axis = new NumericAxis<TimeSeriesDataVO>();
  private final TimeAxis<TimeSeriesDataVO> timeAxis = new TimeAxis<TimeSeriesDataVO>();
  final Chart<TimeSeriesDataVO> chart = new Chart<TimeSeriesDataVO>();
  final ListStore<TimeSeriesDataVO> store = new ListStore<TimeSeriesDataVO>(new ModelKeyProvider<TimeSeriesDataVO>() {
    public String getKey(TimeSeriesDataVO item) {
      return String.valueOf(item.getKey());
    }
  });

  public DynamicLineChart() {

  }

  public DynamicLineChart(int seriesCount, Integer min, Integer max, ArrayList<TimeSeriesDataVO> dataList) {
    for (TimeSeriesDataVO data : dataList) {
      store.add(0,data);
    }

  }
 
  public void redraw() {
    chart.redrawChart();
  }
 
  public Widget asWidget() {
    final ListStore<LineSeries<TimeSeriesDataVO>> fieldStore = new ListStore<LineSeries<TimeSeriesDataVO>>(
        new ModelKeyProvider<LineSeries<TimeSeriesDataVO>>() {
          public String getKey(LineSeries<TimeSeriesDataVO> item) {
            return item.getYField().getPath();
          }
        });

    chart.setStore(store);
    chart.setShadowChart(true);
    chart.setAnimated(true);

    Set<String> keys = store.get(0).keySet();
    for (String k : keys) {
      dbg.debug("Key=" + k);
      LineSeries<TimeSeriesDataVO> series = createLine(k);
      axis.addField(series.getYField());
      chart.addSeries(series);
      fieldStore.add(series);
    }

    axis.setPosition(Position.LEFT);
    TextSprite title = new TextSprite("Number of Hits");
    title.setFontSize(18);
    axis.setTitleConfig(title);
    axis.setMinorTickSteps(1);
    axis.setDisplayGrid(true);
    PathSprite odd = new PathSprite();
    odd.setOpacity(1);
    odd.setFill(new Color("#ddd"));
    odd.setStroke(new Color("#bbb"));
    odd.setStrokeWidth(0.5);
    axis.setGridOddConfig(odd);
    chart.addAxis(axis);

    timeAxis.setField(new MapTimeProvider());
    dbg.debug("StartDate=" + store.get(0).getKey());
    timeAxis.setStartDate(store.get(0).getKey());
    dbg.debug("EndDate=" + store.get(store.size() - 1).getKey());
    timeAxis.setEndDate(store.get(store.size() - 1).getKey());
    timeAxis.setPosition(Position.BOTTOM);
    timeAxis.setLabelProvider(new LabelProvider<Date>() {
      public String getLabel(Date item) {
        return DateTimeFormat.getFormat("h:m:s").format(item);
      }
    });
    chart.addAxis(timeAxis);

    Legend<TimeSeriesDataVO> legend = new Legend<TimeSeriesDataVO>();
    legend.setPosition(Position.RIGHT);
    legend.setItemHighlighting(true);
    legend.setItemHiding(true);
    chart.setLegend(legend);

    chart.setLayoutData(new VerticalLayoutData(1, 1));
    return chart;
  }

  private LineSeries<TimeSeriesDataVO> createLine(String seriesName) {
    MapValueProvider valueProvider = new MapValueProvider(seriesName);
    LineSeries<TimeSeriesDataVO> series = new LineSeries<TimeSeriesDataVO>();
    series.setYAxisPosition(Position.LEFT);
    Color color = new RGB((int) (Math.random() * 255), (int) (Math.random() * 255), (int) (Math.random() * 255));
    series.setStroke(color);
    series.setStrokeWidth(3);
    series.setShowMarkers(true);
    Sprite marker = Primitives.circle(0, 0, 6);
    marker.setFill(color);
    series.setMarkerConfig(marker);
    series.setYField(valueProvider);
    series.setLineHighlighter(new SeriesHighlighter() {

      public void highlight(Sprite sprite) {
        DrawFx.createStrokeWidthAnimator(sprite, 6).run(250);
      }

      public void unHighlight(Sprite sprite) {
        DrawFx.createStrokeWidthAnimator(sprite, 3).run(250);
      }
    });

    return series;
  }

  @Override
  public void updateChartData(DataVO data, Label errorLabel) {
    TimeSeriesDataVO ts = (TimeSeriesDataVO)data;
    chart.getStore().remove(0);
    chart.getStore().add(ts);
    timeAxis.setStartDate(chart.getStore().get(0).getKey());
    timeAxis.setEndDate(chart.getStore().get(chart.getStore().size()-1).getKey());
    chart.redrawChart();

  }
}
TOP

Related Classes of com.odb.view.dashboard.client.charts.DynamicLineChart

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.